Updates im Blick dank Arduino

Weiterfüherende Links zum Artikel "Updates im Blick dank Arduino" SCREENGUIDE#35. (07-09/2017)

Versiondisplay

Project Image Als Webentwickler sind Sie meist für mehrere Projekte verantwortlich. Ist das Projekt online, müssen auch sicherheitsrelevante Änderungen neben der Weiterentwicklung des Projekts kurzfristig berücksichtigt werden. Hier kann es durchaus hilfreich sein, Informationen zu den Hauptkomponenten Ihres Content Management Systems zu kanalisieren und separat darzustellen.


Auf dieser Seite finden Sie weiterführende Links, Quelltexte und Bezugsquellen zum Artikel "Updates im Blick dank Arduino" SCREENGUIDE#35. (07-09/2017)

Oled SSD1306 I2C

Project Image

Bezugsquellen

ENC28J60 Ethernet Module

Project Image

Bezugsquellen

Arduino Sketch

#include "SSD1306Ascii.h"
#include "SSD1306AsciiAvrI2c.h"
#include "EtherCard.h"

#define I2C_ADDRESS 0x3C
#define TIMEOUT 2000;
#define ITERATION 60000;

SSD1306AsciiAvrI2c oled;
static byte mymac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
const char website[] PROGMEM = "[API-URL]";
byte Ethernet::buffer[400];
static uint32_t timer;
int channel = 1;
int state = 0;
String response;


void initOled() {
  oled.begin(&Adafruit128x64, I2C_ADDRESS);
  oled.setFont(Verdana12);
  oled.println("init oled...");
  delay(1000);
}


void initSerial() {
  Serial.begin(9600);
  oled.println("init serial...");
  Serial.println("init serial...");
  delay(1000);
}


void initEthernet() {
  oled.println("init ethernet...");
  delay(1000);
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
    oled.println("failed to access ethernet controller");

  if (!ether.dhcpSetup())
    oled.println("DHCP failed");
  else {
    oled.println("DHCP succeed");
    ether.persistTcpConnection(true);
  }

  delay(1000);

  if (!ether.dnsLookup(website)) {
    oled.clear();
    oled.println("DNS lookup failed.");
  }
  delay(1000);
}


void setup () {
  initOled();
  initSerial();
  initEthernet();
}

static void response_callback (byte status, word off, word len) {
  Ethernet::buffer[off+len] = 0;
  response = String((char*) Ethernet::buffer + off);
  if(response.indexOf("[***]") == 0){
    response.remove(0, 5);
    state=3;
  }
}

void loop () {
	
  ether.packetLoop(ether.packetReceive());

  switch (state) {
    case 0:
	  if (millis() > timer) {
	    channel = (channel == 2) ? 1 : 2;
	    state=1;
	  }
	  break;

    case 1:
      if(channel == 1) {
        ether.browseUrl(PSTR("[APICHANNELONE]"), "", website, response_callback);
      }
      else if(channel == 2) {
        ether.browseUrl(PSTR("[APICHANNELTWO]"), "", website, response_callback);
      }
      state=2;
      timer = millis() + TIMEOUT;
      break;

      case 2:
        if (millis() > timer) {
          state=3;
          response="TIMEOUT";
        }
      break;

      case 3:
        oled.clear();
        oled.print(response);
        timer = millis() + ITERATION;
        state=0;
      break;

      default:
      break;
    }
}